perm filename UTIL.SAI[SYS,HE] blob sn#057822 filedate 1973-08-14 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00008 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	ENTRY DATIM,DATIN,DATOUT,LPTDMP
 00005 00003	⊃ Returns string equivalent to monitor DAYTIME command
 00007 00004	⊃ Inputs individual data sets
 00009 00005	⊃ outputs individual data sets
 00011 00006	⊃ inputs and outputs composite data sets
 00013 00007	⊃ open and read or write entire composite file
 00015 00008	⊃ prints selected portions of data structure
 00020 ENDMK
⊗;
ENTRY DATIM,DATIN,DATOUT,LPTDMP;
BEGIN "UTIL" COMMENT Utility routines for CAMGEN and COLECT;

DEFINE DATA="3",LPT="4",⊃="COMMENT",CRLF="'15&'12",FF="'14",SAFEX="SAFE";
INTERNAL INTEGER SETNUM,LENS,DATE,TIME,CAMNOM,LPTCH,BREAK,LPTON,SETFLG;
INTERNAL REAL PPOT0,PPOTD,TPOT0,TPOTD,FPOT0,FPOTD,TOLER,FOCAL,OFFSET,FSCALE,
	ZPOT0,ZPOTD,FMX,FMY,MRAT,PAN,TILT,SWING,CALERR,PANPTR,TILPTR,
	FOCPTR,ZOOPTR,MFOCNM,POLERR,REFPTR,GROREF,DEV;
SAFEX INTERNAL REAL ARRAY XX[1:3,1:6],YY[1:2,1:6];
SAFEX INTERNAL REAL ARRAY DP[1:3],C,P0[1:3],COEFF,PP[1:2];
SAFEX INTERNAL INTEGER ARRAY SAVBUF, STNBUF[0:50];


⊃ Takes list of set numbers from keyboard
	And stores them in STNBUF[1:STNBUF[0]]
	If null string given, exit with old numbers;

INTERNAL PROCEDURE GTSETS;
	BEGIN
	INTEGER I,LBD,HBD,SPTR,COLON;
	LABEL START;
	STRING TEMP;
START:	BREAK←SPTR←COLON←0;
	OUTSTR("SET NUMBERS = ");
	TEMP←INCHWL;
	IF ¬LENGTH(TEMP) THEN RETURN;
	DO	BEGIN
		IF BREAK=":" THEN
			BEGIN LBD←STNBUF[SPTR];COLON←1;END;
		SPTR←SPTR+1;
		STNBUF[SPTR]←INTSCAN(TEMP,BREAK);
		IF COLON THEN
			BEGIN
			COLON←0;
			HBD←STNBUF[SPTR];
			SPTR←SPTR-1;
			FOR I←LBD+1 STEP 1 UNTIL HBD DO
				BEGIN
				SPTR←SPTR+1;
				STNBUF[SPTR]←I;
				END;
			END;
		END UNTIL BREAK=0;
	IF ¬SPTR THEN GO START ELSE STNBUF[0]←SPTR;
	END;
⊃ Returns string equivalent to monitor DAYTIME command;

INTERNAL STRING PROCEDURE DATIM;
	BEGIN
	INTEGER MO,DAY,YR,HRS,MIN,SEC,TDATE,TTIME;
	STRING MOS,TEM;
	SETFORMAT(-2,0);
	TDATE←DATE;
	TTIME←TIME;
	DAY←(TDATE MOD 31)+1;
	TDATE←TDATE%31;
	MO←(TDATE MOD 12)+1;
	YR←1964+TDATE%12;
	SEC←TTIME MOD 60;
	TTIME←TTIME%60;
	MIN←TTIME MOD 60;
	HRS←TTIME%60;
	MOS←CASE MO-1 OF ("JAN","FEB","MAR","APR","MAY","JUN",
				"JUL","AUG","SEP","OCT","NOV","DEC");
	TEM←CVS(DAY)&"-"&MOS&"-"&CVS(YR)&"   "&CVS(HRS)&CVS(MIN)&":"&
		CVS(SEC);
	SETFORMAT(0,6);
	RETURN(TEM);
	END "DATIM";
⊃ Inputs individual data sets;

INTERNAL PROCEDURE DATIN;
	BEGIN INTEGER BRK, EOF, FLAG;
	STRING NAME;
	DEFINE XFR(X)="ARRYIN(DATA,X,1)", AXFR(X,N)="ARRYIN(DATA,X,N)";
	OPEN(DATA,"DSK",8,3,0,1000,BRK,EOF);
	WHILE TRUE DO
		BEGIN
		NAME←"CAM"&CVS(SETNUM)&".CAL";
		LOOKUP(DATA,NAME,FLAG);
		IF FLAG THEN
			BEGIN
			OUTSTR("LOOKUP FAILED:"&NAME&CRLF&"SET#=");
			SETNUM←CVD(INCHWL);
			END ELSE DONE;
		END;
	OUTSTR(CRLF&"RETRIEVING "&NAME&CRLF);
	XFR(MFOCNM);
	XFR(CAMNOM);
	XFR(LENS);
	XFR(PANPTR);
	XFR(TILPTR);
	XFR(FOCPTR);
	XFR(REFPTR);
	IF CAMNOM=2 THEN BEGIN XFR(ZOOPTR); XFR(ZPOT0); XFR(ZPOTD); END;
	AXFR("XX[1,1]",18);
	AXFR("YY[1,1]",12);
	XFR(PPOT0);
	XFR(PPOTD);
	XFR(TPOT0);
	XFR(TPOTD);
	XFR(FPOT0);
	XFR(FPOTD);
	XFR(FMX);
	XFR(FMY);
	XFR(MRAT);
	XFR(PAN);
	XFR(TILT);
	XFR(SWING);
	XFR(CALERR);
	AXFR(C[1],3);
	AXFR("PP[1]",2);
	AXFR(P0[1],3);
	AXFR("DP[1]",3);
	XFR(DATE);	XFR(TIME);	XFR(GROREF);
	XFR(FOCAL);	XFR(OFFSET);	XFR(FSCALE);
	XFR(SAVBUF[0]);
	IF SAVBUF[0]≠0 THEN  AXFR(SAVBUF[1],SAVBUF[0]);
	RELEASE(DATA);
	END;
⊃ outputs individual data sets;

INTERNAL PROCEDURE DATOUT;
	BEGIN INTEGER BRK, EOF,FLAG;
	STRING NAME;
	DEFINE XFR(X)="ARRYOUT(DATA,X,1)", AXFR(X,N)="ARRYOUT(DATA,X,N)";
	OPEN(DATA,"DSK",8,0,3,1000,BRK,EOF);
	NAME←"CAM"&CVS(SETNUM)&".CAL";
	ENTER(DATA,NAME,FLAG);
	OUTSTR(CRLF&"WRITING "&NAME&CRLF);
	XFR(MFOCNM);
	XFR(CAMNOM);
	XFR(LENS);
	XFR(PANPTR);
	XFR(TILPTR);
	XFR(FOCPTR);
	XFR(REFPTR);
	IF CAMNOM=2 THEN BEGIN XFR(ZOOPTR); XFR(ZPOT0); XFR(ZPOTD); END;
	AXFR("XX[1,1]",18);
	AXFR("YY[1,1]",12);
	XFR(PPOT0);
	XFR(PPOTD);
	XFR(TPOT0);
	XFR(TPOTD);
	XFR(FPOT0);
	XFR(FPOTD);
	XFR(FMX);
	XFR(FMY);
	XFR(MRAT);
	XFR(PAN);
	XFR(TILT);
	XFR(SWING);
	XFR(CALERR);
	AXFR(C[1],3);
	AXFR("PP[1]",2);
	AXFR(P0[1],3);
	AXFR("DP[1]",3);
	XFR(DATE);
	XFR(TIME);
	XFR(GROREF);
	XFR(FOCAL);
	XFR(OFFSET);
	XFR(FSCALE);
	XFR(SAVBUF[0]);
	IF SAVBUF[0]≠0 THEN  AXFR(SAVBUF[1],SAVBUF[0]);
	RELEASE(DATA);
	END;
⊃ inputs and outputs composite data sets;

INTERNAL PROCEDURE COMOUT;
	BEGIN DEFINE XF(X)="ARRYOUT(DATA,X,1)",AF(X,N)="ARRYOUT(DATA,X,N)";
	IF CAMNOM=2 THEN BEGIN XF(ZPOT0);XF(ZPOTD);END;
	XF(PPOT0);	XF(PPOTD);
	XF(TPOT0);	XF(TPOTD);
	XF(FPOT0);	XF(FPOTD);
	XF(MRAT);	XF(SWING);
	AF(PP[1],2);
	AF(P0[1],3);
	AF(DP[1],3);
	XF(FOCAL);	XF(OFFSET);
	XF(FSCALE);	XF(GROREF);
	IF CAMNOM=2 THEN BEGIN XF(DEV);AF(COEFF[1],2);END;
	XF(DATE);	XF(TIME);
	XF(FMX);	XF(FMY);
	XF(PAN);	XF(TILT);
	XF(CALERR);
	AF(C[1],3);
	XF(SAVBUF[0]);
	AF(SAVBUF[1],SAVBUF[0]);
	END;

INTERNAL PROCEDURE COMIN;
	BEGIN DEFINE XF(X)="ARRYIN(DATA,X,1)",AF(X,N)="ARRYIN(DATA,X,N)";
	IF CAMNOM=2 THEN BEGIN XF(ZPOT0);XF(ZPOTD);END;
	XF(PPOT0);	XF(PPOTD);
	XF(TPOT0);	XF(TPOTD);
	XF(FPOT0);	XF(FPOTD);
	XF(MRAT);	XF(SWING);
	AF(PP[1],2);
	AF(P0[1],3);
	AF(DP[1],3);
	XF(FOCAL);	XF(OFFSET);
	XF(FSCALE);	XF(GROREF);
	IF CAMNOM=2 THEN BEGIN XF(DEV);AF(COEFF[1],2);END;
	XF(DATE);	XF(TIME);
	XF(FMX);	XF(FMY);
	XF(PAN);	XF(TILT);
	XF(CALERR);
	AF(C[1],3);
	XF(SAVBUF[0]);
	AF(SAVBUF[1],SAVBUF[0]);
	END;
⊃ open and read or write entire composite file;

⊃ RETURNS TRUE IFF FILE FOUND;

INTERNAL BOOLEAN PROCEDURE COMREAD;
	BEGIN INTEGER BRK,EOF,FLAG;
	STRING NAME;
	OPEN(DATA,"DSK",8,3,0,1000,BRK,EOF);
	NAME ← "TV"&CVS(CAMNOM)&"L"&CVS(LENS)&".COM";
	LOOKUP(DATA,NAME,FLAG);
	IF FLAG THEN
		BEGIN
		OUTSTR(NAME&" NOT FOUND "&CRLF);
		RETURN(FALSE);
		END;
	OUTSTR(CRLF&"RETRIEVING "&NAME&CRLF);
	COMIN;
	RELEASE(DATA);
	RETURN(TRUE);
	END;

INTERNAL PROCEDURE COMWRITE;
	BEGIN INTEGER BRK,EOF,FLAG;
	STRING NAME;
	OPEN(DATA,"DSK",8,0,3,1000,BRK,EOF);
	NAME ← "TV"&CVS(CAMNOM)&"L"&CVS(LENS)&".COM";
	ENTER(DATA,NAME,FLAG);
	OUTSTR(CRLF&"WRITING "&NAME&CRLF);
	COMOUT;
	RELEASE(DATA);
	END;
⊃ prints selected portions of data structure
  SETFLG is false for individual data set, true for composite;

INTERNAL PROCEDURE LPTDMP;
	BEGIN DEFINE EOM= "&CRLF)",PRINT="OUT(LPTCH,",MSG=")",
		__ = "STEP 1 UNTIL", PI="3.14159";
	INTEGER I,J;
	STRING ZOOSTR,ZOOSTR1;
	SETFORMAT(2,6);
	IF ¬LPTON THEN OPEN(LPT,"LPT",1,0,2,0,0,0);
	LPTCH←LPT;
	ZOOSTR←IF CAMNOM=2 THEN "       ZOOM" ELSE NULL;
	ZOOSTR1←IF CAMNOM=2 THEN CVG(ZOOPTR) ELSE "        ";
 	PRINT FF&DATIM&CRLF&CRLF EOM;
	PRINT"CAMERA NUMBER="&CVS(CAMNOM)&"  WITH LENS# "&CVS(LENS)EOM;
	IF ¬SETFLG THEN
		BEGIN "IND"
		PRINT"    MANUAL FOCUS NUMBER="&CVG(MFOCNM)&CRLF&CRLF EOM;
		PRINT"			   PAN         TILT       "&
			"FOCUS     REFERENCE"&ZOOSTR EOM;
		PRINT"	POT-UNITS:	"&CVG(PANPTR)&CVG(TILPTR)&
			CVG(FOCPTR)&CVF(REFPTR)&ZOOSTR1 EOM;
		PRINT"	  DEGREES:	"&CVG(PAN*180/PI)&CVG(TILT*180/PI)
			&CRLF EOM;
		PRINT CRLF&CRLF EOM;
		PRINT"			    1           2           3" );
		PRINT"           4           5           6"EOM;
		PRINT"			"MSG;
		FOR J←1 __ 6 DO PRINT CVG(XX[1,J])MSG;
		PRINT CRLF MSG;
		PRINT"SET #"&CVS(SETNUM)&": TABLE-XX:	"MSG;
		FOR J←1 __ 6 DO PRINT CVG(XX[2,J])MSG;
		PRINT CRLF MSG;
		PRINT"			"MSG;
		FOR J←1 __ 6 DO PRINT CVG(XX[3,J])MSG;
		PRINT CRLF EOM;
		PRINT"	 IMAGE-YY:	"MSG;
		FOR J←1 __ 6 DO PRINT CVG(YY[1,J])MSG;
		PRINT CRLF MSG;
		PRINT"			"MSG;
		FOR J←1 __ 6 DO PRINT CVG(YY[2,J])MSG;
		PRINT CRLF&CRLF EOM;
		END "IND" ELSE PRINT CRLF&CRLF EOM;
	PRINT"	      POT: 	   PPOT0       PPOTD       ");
	PRINT"TPOT0       TPOTD" EOM;
	PRINT"	CONSTANTS:	"&CVG(PPOT0)&CVG(PPOTD)&CVG(TPOT0)&CVG(TPOTD)
		&CRLF EOM;
	PRINT"			   FPOT0       FPOTD"&(IF CAMNOM=2 THEN
		"       ZPOT0       ZPOTD" ELSE NULL) EOM;
	PRINT"			"&CVG(FPOT0)&CVG(FPOTD)&(IF CAMNOM=2 THEN
		CVG(ZPOT0)&CVG(ZPOTD) ELSE NULL)&CRLF&CRLF EOM;
	PRINT"			  CALERR        FMX        FMY        ");
	PRINT"MRAT        PP[1]       PP[2]"EOM;
	PRINT"	   CAMERA:	"&CVG(CALERR)&CVG(FMX)&CVG(FMY)&CVG(MRAT)
		&CVG(PP[1])&CVG(PP[2])&CRLF EOM;
	PRINT"	    MODEL:	   C[1]        C[2]        C[3]        ");
	PRINT"PAN         TILT       SWING"EOM;
	PRINT"			"&CVG(C[1])&CVG(C[2])&CVG(C[3])&
		CVG(PAN*180/PI)&CVG(TILT*180/PI)&CVG(SWING)&CRLF EOM;
	PRINT"			  P0[1]       P0[2]       P0[3]     "
		&"  DP[1]       DP[2]       DP[3]"EOM;
	PRINT"			"&CVG(P0[1])&CVG(P0[2])&CVG(P0[3])
		&CVG(DP[1])&CVG(DP[2])&CVG(DP[3])&CRLF EOM;
	PRINT"			  FOCAL       OFFSET      SCALE" EOM;
	PRINT"			"&CVG(FOCAL)&CVG(OFFSET)&CVG(FSCALE)&CRLF EOM;
	IF CAMNOM=2 THEN PRINT CRLF&"ZOOM COEFFICIENTS="&CVG(COEFF[1])&
		CVG(COEFF[2])&"   DEVIATION="&CVG(DEV)&CRLF EOM;
	PRINT CRLF&"AVERAGE REFERENCE FOR DATA SETS="&CVF(GROREF) EOM;
	IF SAVBUF[0]≠0 THEN
		BEGIN
		PRINT "THE FOLLOWING "&CVS(SAVBUF[0])&
			" SETS WERE RELAXED TO GENERATE CAMERA MODEL:"EOM;
		FOR I←1 __ SAVBUF[0] DO PRINT CVS(SAVBUF[I])&"," MSG;
		PRINT CRLF EOM;
		END;  
	SETFORMAT(0,6);
	IF ¬LPTON THEN RELEASE(LPTCH);
	END "LPTDMP";
   
END "UTIL";